#include <stdio.h>
#include <cstring>
#define ll long long
using namespace std;

int read(){
	int a1=0,k1=1;char c1=getchar();
	while(c1<'0'||c1>'9'){
		if(c1=='-')k1=-1;c1=getchar();
	}
	while(c1>='0'&&c1<='9'){
		a1=a1*10+c1-'0';
		c1=getchar();
	}
	return a1*k1;
}
inline int min(int x,int y){
	return x>y?y:x;
}
char a[55];int f[55][55];
int main(){
	scanf("%s",a+1);   //下标从1开始
        int n=strlen(a+1);
	for(int i=1;i<=n;++i){
		for(int j=1;j<=n;++j){
			f[i][j]=0x3f3f3f3f;
		}
		f[i][i]=1;
	}
	for(int len=1;len<n;++len){         //枚举长度
		for(int i=1,j;i+len<=n;++i){      //枚举左端点
			 j=i+len;                   //枚举右端点
			 if(a[i]==a[j]){
			 	f[i][j]=min(f[i+1][j],f[i][j-1]);   //显然，第一种情况。
			 }
			 else{
			 	for(int k=i;k<j;++k){          //枚举中转点，是从i到j-1,因为k+1≤j。
			 		f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]);   //第二种情况
			 	}
			 }
		}
	}
	printf("%d\n",f[1][n]);
	return 0;
}
